package com.modernyuanshiren;

import java.util.List;


public interface ISingleAction<T extends IStatus<T,U>,U extends ISingleAction<T,U>> {
	String getName();
	
	boolean acceptable(T status, IElement... elements);
	
	default boolean acceptable(T status, List<IElement> elements){
		return acceptable(status, elements.toArray(new IElement[]{}));
	};
	
	default void apply(IElement... elements) {
		apply(null, elements);
	}
	
	void apply(T status, IElement... elements);
	
	default void apply(List<IElement> elements, T status) {
		apply(status, elements.toArray(new IElement[]{}));
	}

	default void translate(IElement element, int dx, int dy) {
		element.getPosition().getPoint().translate(dx, dy);
	};

	default void translate(IElement element, int dx) {
		element.getPosition().getPoint().translate(dx, 0);
	};

	default void moveTo(IElement element, int x, int y) {
		element.getPosition().getPoint().move(x, y);
	};

	boolean notNecessary(U preAction);

}
